package com.sjs.boot.dynamic.facade.run;

//import net.sf.ehcache.Cache;
//import net.sf.ehcache.Element;

import com.sjs.boot.dynamic.core.config.method.MethodConfig;
import com.sjs.boot.dynamic.core.run.MethodContext;
import com.sjs.boot.dynamic.facade.config.AbstractProcessConfig;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * @author uto_dev_008
 * @desc
 * @since 2021/11/9 19:35
 * Copyright (c) 2021 南京友拓信息技术有限公司 All rights reserved
 */
abstract public class AbstractProcessor extends AbstractHandler {
    private static final Logger LOG = LoggerFactory.getLogger(AbstractProcessor.class);

    /**
     * 实现接口的主要功能，因为实现类在运行前只有一个实例，
     * 所以必须保证process是能够重入的，即，process不依赖全局的状态
     *
     * @param context 接口调用的上下文，包括了所有请求参数等
     * @return RetCode.OK表示成功，其他为失败
     */
    abstract public int process(MethodContext context);

    /**
     * 当所有处理都完成后执行，无论前面执行的是否成功都会执行
     *
     * @param context 会话
     * @return
     */
    abstract public int afterAll(MethodContext context);


    public int handle(MethodContext context) {
        MethodConfig mc = context.getMethodConfig();
        AbstractProcessConfig config = (AbstractProcessConfig) mc.getProcessConfig();
        return process(context);
    }

}
